package com.solairen.myapplication.Pager.LoginPager;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;

import com.solairen.myapplication.MainActivity;
import com.solairen.myapplication.R;
import com.solairen.myapplication.data.MainVM;
import com.solairen.myapplication.net.HttpResult;
import com.solairen.myapplication.utils.ApiResponseCallback;
import com.solairen.myapplication.utils.MD5;

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import okhttp3.*;

public class RegisterNameActivity extends AppCompatActivity {
    private static final String server = "http://ads.zhen-guo.top:8080";
    private EditText etUsername, etPassword, etConfirmPassword;
    private CheckBox cbAgreement;
    private Button btnRegister;
    private TextView phoneRegister,goLogin,agreement;
    private Toast currentToast;

    private MainVM mainVM;

    private void showToast(String message, int duration) {
        if (currentToast != null) {
            currentToast.cancel(); // 取消当前正在显示的Toast
        }
        currentToast = Toast.makeText(RegisterNameActivity.this, message, duration);
        currentToast.show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register_name);

//        phoneRegister = findViewById(R.id.phone_register_textview);
        etUsername = findViewById(R.id.zc_username);
        etPassword = findViewById(R.id.zc_password);
        etConfirmPassword=findViewById(R.id.zc_conPassword);
        cbAgreement = findViewById(R.id.checkBox_agreement);
        btnRegister = findViewById(R.id.btn_login);
        goLogin = findViewById(R.id.tv_go_login);
        agreement = findViewById(R.id.Agreementt);
        /****************更改成了OKhttp方案****************/
//        // 监听数据
//        mainVM = new ViewModelProvider(this).get(MainVM.class);
//        mainVM.getLoginLD().observe(this, baseModelHttpResult -> {
//            if (baseModelHttpResult instanceof HttpResult.Success) {
//                // 跳转首页
//                Intent intent = new Intent(RegisterNameActivity.this, MainActivity.class);
//                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
//                startActivity(intent);
//                finish();
//            } else if (baseModelHttpResult instanceof HttpResult.Failure) {
//                Toast.makeText(this, "注册失败", Toast.LENGTH_SHORT).show();
//            } else {
//                Toast.makeText(this, "注册失败", Toast.LENGTH_SHORT).show();
//            }
//        });

        /*****************************注册按钮点击事件*********************************/

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (cbAgreement.isChecked()) {
                    if (!etUsername.getText().toString().isEmpty()
                            && !etPassword.getText().toString().isEmpty()
                            && etPassword.getText().toString().equals(etConfirmPassword.getText().toString())) {

                        // FIXME: 2024/3/5 发起注册

                        String name = etUsername.getText().toString();
                        String hashedpwd = MD5.encrypt(etPassword.getText().toString());
                        registerRequest(new ApiResponseCallback() {
                            @Override
                            public void onSuccess(Response response) {
                                try {
                                    JSONObject jsonObject = new JSONObject(response.body().string());
                                    String code = jsonObject.getString("code");


                                    if (code.equals("0")) {

                                        Intent intent = new Intent(RegisterNameActivity.this, CustomDialogFragment.class);
                                        intent.putExtra("code", code);
                                        startActivity(intent);
                                        finish();
                                    } else {
                                        // 注册失败，显示错误信息
                                        String errorMessage = jsonObject.getString("Message"); // 替换为实际错误信息字段
                                        showToast(errorMessage, Toast.LENGTH_SHORT);
                                    }
                                }catch (Exception e){
                                    e.printStackTrace();
                                    Log.d("response", e.toString());
                                    showToast("数据解析异常", Toast.LENGTH_SHORT);
                                }
                            }

                            @Override
                            public void onFailure(IOException e) {
                                showToast("连接失败", Toast.LENGTH_SHORT);
                            }
                        }, name, hashedpwd);
                    } else {
                        showToast("请输入完整且匹配的用户名与密码", Toast.LENGTH_SHORT);
                    }
                } else {
                    showToast("请先同意平台协议", Toast.LENGTH_SHORT);
                }
            }
        });


        /*****跳转登录**********************/
        goLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(RegisterNameActivity.this, LoginNameActivity.class);
                startActivity(intent);

            }
        });

        /*******用户协议*******************/

        agreement.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showAgreementDialog();
            }
        });


    }




    public void registerRequest(ApiResponseCallback callback, String username, String password){
        Log.d("username", username);
        Log.d("password", password);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    OkHttpClient httpClient = new OkHttpClient();
                    MediaType text = MediaType.parse("application/x-www-form-urlencoded");
                    String textContent = "username=" + username + "&password=" + password;
                    RequestBody requestBody = RequestBody.create(text, textContent);

                    /**********域名绑到ip上了*************/
                    String url = server + "/user/register";
                    Request request = new Request.Builder()
                            .url(url)
                            .post(requestBody)
                            .build();

                    Call call = httpClient.newCall(request);
                    Response response = call.execute();
                    if (response.isSuccessful()) {
                        // 请求成功，通过回调返回响应
                        callback.onSuccess(response);
                    } else {
                        // 请求失败，通过回调返回异常信息
                        callback.onFailure(new IOException("Unexpected response code: " + response.code()));
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    // 请求失败，通过回调返回异常信息
                    callback.onFailure(e);
                }
            }
        }).start();
    }

    private void showAgreementDialog() {
        String agreementText =
                "\n" +
                "一、总则\n" +
                "\n" +
                "欢迎您使用ADSmartSkin（以下简称“本App”）。在您注册、登录或以其他方式使用本App提供的任何服务之前，请仔细阅读并同意本用户服务协议（以下简称“协议”）。一旦您点击确认或开始使用本App服务，即视为您已充分理解并接受本协议所有条款。\n" +
                "\n" +
                "二、服务内容与授权\n" +
                "\n" +
                "本App为您提供医疗查询、自助诊断、记录查阅等相关医疗服务。我们将尽最大努力确保信息的真实性和准确性，但不对由此产生的所有后果承担责任。\n" +
                "\n" +
                "您承诺提供真实、准确、完整且有效的个人信息，并保证不冒用他人身份进行注册和使用。\n" +
                "\n" +
                "三、用户信息保护\n" +
                "\n" +
                "我们尊重并保护您的隐私权，详情请参阅我们的《隐私政策》。我们仅会在法律法规允许及获得您明确授权的情况下收集、使用和共享您的个人信息。\n" +
                "\n" +
                "您理解并同意，为了提供服务，本App可能需要保存和使用您的健康、医疗相关信息。\n" +
                "\n" +
                "四、用户行为规范\n" +
                "\n" +
                "您不得利用本App发布违法、违规、侵犯他人权益的内容，也不得滥用、篡改本App提供的服务。\n" +
                "\n" +
                "您理解医学决策需依据医生的专业建议，本App所提供的信息仅供参考，不能替代面对面诊疗。\n" +
                "\n" +
                "五、责任限制与免责声明\n" +
                "\n" +
                "除因我方故意或重大过失外，对于因网络故障、系统维护升级等原因导致的服务中断或延迟，以及由于第三方原因或不可抗力因素造成的损失，本App不承担赔偿责任。\n" +
                "\n" +
                "本App不保证所提供的所有信息、服务完全准确无误，对于因使用本App服务而发生的任何直接、间接损失，除非法律有明确规定，否则本App概不承担责任。\n" +
                "\n" +
                "六、协议修改与终止\n" +
                "\n" +
                "我们有权随时修订本协议并在App内公示，您应当定期查看最新协议内容。如您不同意修改后的协议，可选择停止使用本App服务；继续使用即视为接受修改内容。\n" +
                "\n" +
                "七、争议解决\n" +
                "\n" +
                "关于本协议的解释、效力及纠纷解决，均适用中华人民共和国法律（或其他适用法律区域）。若双方发生争议，应首先友好协商解决；协商不成的，任何一方均有权将争议提交至有管辖权的人民法院诉讼解决。\n"; // 替换为您的大段协议文本

        final AlertDialog alertDialog = new AlertDialog.Builder(RegisterNameActivity.this)
                .setTitle("用户协议")
                .setMessage(agreementText)
                .setCancelable(false)
                .setPositiveButton("同意", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        cbAgreement.setChecked(true);
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("不同意", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create();

        alertDialog.show();
    }
}